`ifndef TRANSACTION_SVH
`define TRANSACTION_SVH

virtual class trans_base; // 抽象类
	pure virtual function void print(string name = ""); // 纯虚方法
endclass

class trans_a extends trans_base; // 派生类trans_a
	bit [3:0] a; // 新属性a

	function new(input bit [3:0] a = 0);
		this.a = a;
	endfunction

	virtual function void print(input string name = ""); // 虚方法
		$display("%s: a=%0d", name, a);
	endfunction
endclass

class trans_b extends trans_a; // 派生类trans_b
	bit [3:0] b; // 新属性b

	function new(input bit [3:0] a = 0, bit [3:0] b = 0);
		super.new(a); // 必须在首行调用基类的new方法
		this.b = b;
	endfunction

	virtual function void print(input string name = "");  // 重定义基类的虚方法
		super.print(name); // 在首行调用基类的print方法
		$display("%s: b=%0d", name, b);
	endfunction
endclass

`endif
